package com.bright.ghj.overt.manager;

import com.bright.ghj.common.pojo.dto.PageDTO;
import com.bright.ghj.overt.pojo.dto.DistDTO;
import com.bright.ghj.overt.pojo.dto.ZtAdaptDTO;
import com.bright.ghj.overt.pojo.dto.ZtDTO;
import com.bright.ghj.overt.pojo.query.DistQuery;

import java.util.List;
import java.util.Map;

/**
 * @Author hxj
 * @Date 2024/1/17 11:32
 * @Description 地区账套信息获取
 */
public interface DistZtManager {

    /**
     *
     * @param distNo
     * @return
     */
    DistDTO getDistByDistNoByCache(String distNo);

    /**
     * 根据地区名称获取地区
     * @param distName
     * @return
     */
    DistDTO getDistByDistNameByCache(String distName);

    /**
     * 获取账套信息
     * @param ztId
     * @return
     */
    ZtDTO getZtByZtIdByCache(String ztId);

    /**
     * 获取地区列表
     *
     * @param distNo       父级地区
     * @param distNoLength 地区编号长度
     * @param userDistNo
     * @return
     */
    List<DistDTO> listDistByDistNoAndLength(String distNo, int distNoLength, List<String> userDistNo);

    /**
     * 获取账套列表 不分页
     *
     * @param distNo     父级地区
     * @param userDistNo
     * @return
     */
    List<ZtDTO> listZtByDistNo(DistQuery distQuery);

    /**
     * 获取账套列表 分页
     * @param distNo 父级地区
     * @return
     */
    PageDTO<ZtDTO> pageZtByDistNo(DistQuery distQuery);

    /**
     * 获取账套表某些字段的值 财务公开获取脚注用
     * @param ztId
     * @param fieldNames
     * @return
     */
    Map<String, Object> getZtFieldValueByFieldNames(String ztId, List<String> fieldNames);


    /**
     * 获取账套信息列表
     * @param ztIds 账套id列表
     * @return      账套列表
     */
    List<ZtDTO> findByZtIds(List<String> ztIds);

    /**
     * 获取下一级地区/账套号的长度
     * @param distNo
     * @return
     */
    int getNextLength(String distNo);

    /**
     * 保存账套信息（用于更新账套适配）
     * 注意：JPA的save方法做不到只保存个别字段 没赋值的字段会被更新为null！
     * @param ztDTO
     */
    void saveZtAdapt(ZtAdaptDTO ztDTO);

    /**
     * 新增地区（Access导入用）
     * @param dist
     */
    void insertNewDist(DistDTO dist);

    /**
     * 修改账套信息 如单位负责人、监督小组等（Access导入用）
     * @param params
     */
    void updateZtParamsByZtId(String ztId, Map<String, Object> params);

    /**
     * Access导入查找对应账套号
     * @param zthImport
     * @return
     */
    ZtDTO findByZthImportByCache(String zthImport);

}
